package com.shuiyun.jtt.message.jt808;

import com.shuiyun.jtt.anno.Message;
import com.shuiyun.jtt.enums.JT808;
import com.shuiyun.jtt.message.JTMessage;
import com.shuiyun.jtt.message.mapping.LocationAttributes;
import com.shuiyun.jtt.utils.codec.DataType;
import com.shuiyun.jtt.utils.codec.FieldValue;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;

/**
 * @author shuiyun
 * @description 测试消息实体
 * @date 2022-04-18 23:51
 */
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Data
@Message(value = JT808.位置信息汇报0x0200)
public class T0200 extends JTMessage {

    /**
     * 0 1 :紧急报警,触动报警开关后触发
     * 1 1 :超速报警
     * 2 1 :疲劳驾驶报警
     * 3 l :危险驾驶行为报警
     * 4 1: GNSS模块发生故障报警
     * 5 1 :GNSS天线未接或被剪断报警
     * 6 1:GNSS天线短路报警
     * 7 l :终端主电源欠压报警
     * 8 1 :终端主电源掉电报警
     * 9 1 :终端LCD 或显示器故障报警
     * 10 1 : TTS模块故障报警
     * 11 1 :摄像头故障报警
     * 12 1 :道路运输证IC卡模块故障报警
     * 13 1 :超速预警
     * 14 1 :疲劳驾驶预警
     * l5 l :违规行驶报警
     * l6 1 :胎压预警
     * 17 1:右转盲区异常报警
     * 18 1 :当天累计驾驶超时报警
     * 19 1 :超时停车报警
     * 20 1 :进出区域报警
     * 21 1 :进出路线报警
     * 22 1 :路段行驶时间不足/过长报警
     * 23 1 :路线偏离报警
     * 24 1:车辆VSS故障
     * 25 1 :车辆油量异常报警
     * 26 1:车辆被盗报警(通过车辆防盗器)
     * 27 1:车辆非法点火报警
     * 28 1 :车辆非法位移报警
     * 29 1 :碰撞侧翻报警
     * 30 1 :侧翻预警
     */
    @FieldValue(type = DataType.DWORD,desc = "报警标识")
    @ApiModelProperty(value = "报警标识",example = "0")
    private Integer warningMark;

    /**
     * 0 0 :ACC关;l:ACC开
     * 1 0:未定位;1 :定位
     * 2 0:北纬;1 :南纬
     * 3 0:东经;1:西经
     * 4 0:运营状态;1 :停运状态
     * 5 0:经纬度未经保密插件加密;1:经纬度已经保密插件加密
     * 6 1:紧急刹车系统采集的前撞预警
     * 7 1 :车道偏移预警
     * 8 ~9 00:空车;01 :半载;10:保留;11 :满载。可表示客车的空载状态,重车及货车的空载,满载状态,该状态可由人工输入或传感器获取
     * 10 0:车辆油路正常;1:车辆油路断开
     * 11 0:车辆电路正常;1:车辆电路断开
     * 12 0:车门解锁;1:车门加锁
     * 13 0:门1关;1:门1开(前门)
     * 14 0:门2关;1:门2开(中门)
     * 15 0:门3关;1:门3开(后门)
     * 16 0:门4关;1 :门4开(驾驶席门)
     * 17 0:门5关;1 :门5开(自定义)
     * 18 0:未使用GPS卫星进行定位;1:使用GPS卫星进行定位
     * 19 0:未使用北斗卫星进行定位;1:使用北斗卫星进行定位
     * 20 0:未使用GLONASS卫星进行定位;1:使用GLONASS卫星进行定位
     * 21 0:未使用Galileo卫星进行定位;1:使用Galileo卫星进行定位
     * 22 0:车辆处于停止状态;1:车辆处于行驶状态
     */
    @FieldValue(type = DataType.DWORD,desc = "状态")
    @ApiModelProperty(value = "状态",example = "3")
    private Integer status;

    @FieldValue(type = DataType.DWORD,desc = "纬度")
    @ApiModelProperty(value = "纬度",example = "30554380")
    private Integer latitude;

    @FieldValue(type = DataType.DWORD,desc = "经度")
    @ApiModelProperty(value = "经度",example = "104064048")
    private Integer longitude;

    @FieldValue(type = DataType.WORD,desc = "高度")
    @ApiModelProperty(value = "高度",example = "420")
    private Integer altitude;

    @FieldValue(type = DataType.WORD,desc = "速度")
    @ApiModelProperty(value = "速度",example = "80")
    private Integer speed;

    @FieldValue(type = DataType.WORD,desc = "方向")
    @ApiModelProperty(value = "方向",example = "10")
    private Integer direction;

    @FieldValue(type = DataType.BCD,desc = "时间")
    @ApiModelProperty(value = "时间",example = "220426215801")
    private Date dateTime;

    @FieldValue(type = DataType.MAP,desc = "附加信息",clazz = LocationAttributes.class,length = 1,ignore = true)
    @ApiModelProperty(value = "附加信息",example = "{}")
    private String attributes;
}
